/**
 * Core script to handle the entire layout and base functions
 */
var App = function() {

	// IE mode
	var isRTL = false;
	var isIE8 = false;
	var isIE9 = false;
	var isIE10 = false;

	var sidebarWidth = 225;
	var sidebarCollapsedWidth = 35;

	var responsiveHandlers = [];

	// theme layout color set
	var layoutColorCodes = {
		'blue' : '#4b8df8',
		'red' : '#e02222',
		'green' : '#35aa47',
		'purple' : '#852b99',
		'grey' : '#555555',
		'light-grey' : '#fafafa',
		'yellow' : '#ffb848'
	};

	var handleInit = function() {

		if ($('body').css('direction') === 'rtl') {
			isRTL = true;
		}

		isIE8 = !!navigator.userAgent.match(/MSIE 8.0/);
		isIE9 = !!navigator.userAgent.match(/MSIE 9.0/);
		isIE10 = !!navigator.userAgent.match(/MSIE 10/);

		if (isIE10) {
			jQuery('html').addClass('ie10'); // detect IE10 version
		}
	}

	var handleDesktopTabletContents = function() {
		// loops all page elements with "responsive" class and applies classes
		// for tablet mode
		// For metornic 1280px or less set as tablet mode to display the content
		// properly
		if ($(window).width() <= 1280 || $('body').hasClass('page-boxed')) {
			$(".responsive").each(function() {
				var forTablet = $(this).attr('data-tablet');
				var forDesktop = $(this).attr('data-desktop');
				if (forTablet) {
					$(this).removeClass(forDesktop);
					$(this).addClass(forTablet);
				}
			});
		}

		// loops all page elements with "responsive" class and applied classes
		// for desktop mode
		// For metornic higher 1280px set as desktop mode to display the content
		// properly
		if ($(window).width() > 1280 && $('body').hasClass('page-boxed') === false) {
			$(".responsive").each(function() {
				var forTablet = $(this).attr('data-tablet');
				var forDesktop = $(this).attr('data-desktop');
				if (forTablet) {
					$(this).removeClass(forTablet);
					$(this).addClass(forDesktop);
				}
			});
		}
	}

	var handleSidebarState = function() {
		// remove sidebar toggler if window width smaller than 900(for table and
		// phone mode)
		if ($(window).width() < 980) {
			$('body').removeClass("page-sidebar-closed");
		}
	}

	var runResponsiveHandlers = function() {
		// reinitialize other subscribed elements
		for ( var i in responsiveHandlers) {
			var each = responsiveHandlers[i];
			each.call();
		}
	}

	var handleResponsive = function() {
		handleTooltips();
		handleSidebarState();
		handleDesktopTabletContents();
		handleSidebarAndContentHeight();
		handleChoosenSelect();
		handleFixedSidebar();
		runResponsiveHandlers();
	}

	var handleResponsiveOnInit = function() {
		handleSidebarState();
		handleDesktopTabletContents();
		handleSidebarAndContentHeight();
	}

	var handleResponsiveOnResize = function() {
		var resize;
		if (isIE8) {
			var currheight;
			$(window).resize(function() {
				if (currheight == document.documentElement.clientHeight) {
					return; // quite event since only body resized not window.
				}
				if (resize) {
					clearTimeout(resize);
				}
				resize = setTimeout(function() {
					handleResponsive();
				}, 50); // wait 50ms until window resize finishes.
				currheight = document.documentElement.clientHeight; // store last body client height
			});
		} else {
			$(window).resize(function() {
				if (resize) {
					clearTimeout(resize);
				}
				resize = setTimeout(function() {
					console.log('resize');
					handleResponsive();
				}, 50); // wait 50ms until window resize finishes.
			});
		}
	}

	// * BEGIN:CORE HANDLERS *//
	// this function handles responsive layout on screen size resize or mobile
	// device rotate.

	var handleSidebarAndContentHeight = function() {
		var content = $('.page-content');
		var sidebar = $('.page-sidebar');
		var body = $('body');
		var height;

		if (body.hasClass("page-footer-fixed") === true
				&& body.hasClass("page-sidebar-fixed") === false) {
			var available_height = $(window).height() - $('.footer').height();
			if (content.height() < available_height) {
				content.attr('style', 'min-height:' + available_height + 'px !important');
			}
		} else {
			if (body.hasClass('page-sidebar-fixed')) {
				height = _calculateFixedSidebarViewportHeight();
			} else {
				height = sidebar.height() + 20;
			}
			if (height >= content.height()) {
				content.attr('style', 'min-height:' + height + 'px !important');
			}
		}
	}

	var handleSidebarMenu = function() {
		jQuery('.page-sidebar').on(
				'click',
				'li > a',
				function(e) {
					if ($(this).next().hasClass('sub-menu') == false) {
						if ($('.btn-navbar').hasClass('collapsed') == false) {
							$('.btn-navbar').click();
						}
						return;
					}

					var parent = $(this).parent().parent();

					parent.children('li.open').children('a').children('.arrow').removeClass('open');
					parent.children('li.open').children('.sub-menu').slideUp(200);
					parent.children('li.open').removeClass('open');

					var sub = jQuery(this).next();
					if (sub.is(":visible")) {
						jQuery('.arrow', jQuery(this)).removeClass("open");
						jQuery(this).parent().removeClass("open");
						sub.slideUp(200, function() {
							handleSidebarAndContentHeight();
						});
					} else {
						jQuery('.arrow', jQuery(this)).addClass("open");
						jQuery(this).parent().addClass("open");
						sub.slideDown(200, function() {
							handleSidebarAndContentHeight();
						});
					}
					e.preventDefault();
				});

		// handle ajax links
		jQuery('.page-sidebar').on('click', ' li > a.ajaxify', function(e) {
			e.preventDefault();
			App.scrollTop();

			var url = $(this).attr("href");
			var menuContainer = jQuery('.page-sidebar ul');
			var pageContent = $('.page-content');
			var pageContentBody = $('.page-content .page-content-body');

			menuContainer.children('li.active').removeClass('active');
			menuContainer.children('arrow.open').removeClass('open');

			$(this).parents('li').each(function() {
				$(this).addClass('active');
				$(this).children('a > span.arrow').addClass('open');
			});
			$(this).parents('li').addClass('active');

			App.blockUI(pageContent, false);

			$.post(url, {}, function(res) {
				App.unblockUI(pageContent);
				pageContentBody.html(res);
				App.fixContentHeight(); // fix content height
				App.initUniform(); // initialize uniform elements
			});
		});
	}

	var _calculateFixedSidebarViewportHeight = function() {
		var sidebarHeight = $(window).height() - $('.header').height() + 1;
		if ($('body').hasClass("page-footer-fixed")) {
			sidebarHeight = sidebarHeight - $('.footer').height();
		}

		return sidebarHeight;
	}

	var handleFixedSidebar = function() {
		var menu = $('.page-sidebar-menu');

		if (menu.parent('.slimScrollDiv').size() === 1) { // destroy existing instance before updating the height
			menu.slimScroll({
				destroy : true
			});
			menu.removeAttr('style');
			$('.page-sidebar').removeAttr('style');
		}

		if ($('.page-sidebar-fixed').size() === 0) {
			handleSidebarAndContentHeight();
			return;
		}

		if ($(window).width() >= 980) {
			var sidebarHeight = _calculateFixedSidebarViewportHeight();

			menu.slimScroll({
				size : '7px',
				color : '#a1b2bd',
				opacity : .3,
				position : isRTL ? 'left' : ($('.page-sidebar-on-right').size() === 1 ? 'left' : 'right'),
				height : sidebarHeight,
				allowPageScroll : false,
				disableFadeOut : false
			});
			handleSidebarAndContentHeight();
		}
	}

	var handleFixedSidebarHoverable = function() {
		if ($('body').hasClass('page-sidebar-fixed') === false) {
			return;
		}

		$('.page-sidebar').off('mouseenter').on(
				'mouseenter',
				function() {
					var body = $('body');

					if ((body.hasClass('page-sidebar-closed') === false || body
							.hasClass('page-sidebar-fixed') === false)
							|| $(this).hasClass('page-sidebar-hovering')) {
						return;
					}

					body.removeClass('page-sidebar-closed').addClass('page-sidebar-hover-on');
					$(this).addClass('page-sidebar-hovering');
					$(this).animate({
						width : sidebarWidth
					}, 400, '', function() {
						$(this).removeClass('page-sidebar-hovering');
					});
				});

		$('.page-sidebar')
				.off('mouseleave')
				.on('mouseleave',
					function() {
						var body = $('body');

						if ((body.hasClass('page-sidebar-hover-on') === false || body
								.hasClass('page-sidebar-fixed') === false)
								|| $(this).hasClass('page-sidebar-hovering')) {
							return;
						}

						$(this).addClass('page-sidebar-hovering');
						$(this).animate({width : sidebarCollapsedWidth}, 400, '',
						function() {
							$('body').addClass('page-sidebar-closed')
									.removeClass('page-sidebar-hover-on');
							$(this).removeClass('page-sidebar-hovering');
						});
					});
	}

	var handleSidebarToggler = function() {
		// handle sidebar show/hide
		$('.page-sidebar').on('click', '.sidebar-toggler',
				function(e) {
					var body = $('body');
					var sidebar = $('.page-sidebar');

					if ((body.hasClass("page-sidebar-hover-on") && body
							.hasClass('page-sidebar-fixed'))
							|| sidebar.hasClass('page-sidebar-hovering')) {
						body.removeClass('page-sidebar-hover-on');
						sidebar.css('width', '').hide().show();
						e.stopPropagation();
						runResponsiveHandlers();
						return;
					}

					$(".sidebar-search", sidebar).removeClass("open");

					if (body.hasClass("page-sidebar-closed")) {
						body.removeClass("page-sidebar-closed");
						if (body.hasClass('page-sidebar-fixed')) {
							sidebar.css('width', '');
						}
					} else {
						body.addClass("page-sidebar-closed");
					}
					runResponsiveHandlers();
				});

		// handle the search bar close
		$('.page-sidebar').on('click', '.sidebar-search .remove', function(e) {
			e.preventDefault();
			$('.sidebar-search').removeClass("open");
		});

		// handle the search query submit on enter press
		$('.page-sidebar').on('keypress', '.sidebar-search input', function(e) {
			if (e.which == 13) {
				window.location.href = "extra_search.html";
				return false; // <---- Add this line
			}
		});

		// handle the search submit
		$('.sidebar-search .submit').on('click', function(e) {
			e.preventDefault();

			if ($('body').hasClass("page-sidebar-closed")) {
				if ($('.sidebar-search').hasClass('open') == false) {
					if ($('.page-sidebar-fixed').size() === 1) {
						$('.page-sidebar .sidebar-toggler').click(); // trigger sidebar toggle button
					}
					$('.sidebar-search').addClass("open");
				} else {
					window.location.href = "extra_search.html";
				}
			} else {
				window.location.href = "extra_search.html";
			}
		});
	}

	var handleHorizontalMenu = function() {
		// handle hor menu search form toggler click
		$('.header').on('click', '.hor-menu .hor-menu-search-form-toggler',
				function(e) {
					if ($(this).hasClass('hide')) {
						$(this).removeClass('hide');
						$('.header .hor-menu .search-form').hide();
					} else {
						$(this).addClass('hide');
						$('.header .hor-menu .search-form').show();
					}
					e.preventDefault();
				});

		// handle hor menu search button click
		$('.header').on('click', '.hor-menu .search-form .btn', function(e) {
			window.location.href = "extra_search.html";
			e.preventDefault();
		});

		// handle hor menu search form on enter press
		$('.header').on('keypress', '.hor-menu .search-form input',
				function(e) {
					if (e.which == 13) {
						window.location.href = "extra_search.html";
						return false;
					}
				});
	}

	var handleGoTop = function() {
		/* set variables locally for increased performance */
		jQuery('.footer').on('click', '.go-top', function(e) {
			App.scrollTo();
			e.preventDefault();
		});
	}

	var handlePortletTools = function() {
		jQuery('body').on(
				'click',
				'.portlet .tools a.remove',
				function(e) {
					e.preventDefault();
					var removable = jQuery(this).parents(".portlet");
					if (removable.next().hasClass('portlet')
							|| removable.prev().hasClass('portlet')) {
						jQuery(this).parents(".portlet").remove();
					} else {
						jQuery(this).parents(".portlet").parent().remove();
					}
				});

		jQuery('body').on('click', '.portlet .tools a.reload', function(e) {
			e.preventDefault();
			var el = jQuery(this).parents(".portlet");
			App.blockUI(el);
			window.setTimeout(function() {
				App.unblockUI(el);
			}, 1000);
		});

		jQuery('body')
				.on(
						'click',
						'.portlet .tools .collapse, .portlet .tools .expand',
						function(e) {
							e.preventDefault();
							var el = jQuery(this).closest(".portlet").children(
									".portlet-body");
							if (jQuery(this).hasClass("collapse")) {
								jQuery(this).removeClass("collapse").addClass("expand");
								el.slideUp(200);
							} else {
								jQuery(this).removeClass("expand").addClass("collapse");
								el.slideDown(200);
							}
						});
	}

	var handleUniform = function() {
		if (!jQuery().uniform) {
			return;
		}
		var test = $("input[type=checkbox]:not(.toggle), input[type=radio]:not(.toggle, .star)");
		if (test.size() > 0) {
			test.each(function() {
				if ($(this).parents(".checker").size() == 0) {
					$(this).show();
					$(this).uniform();
				}
			});
		}
	}

	var handleAccordions = function() {
		$(".accordion").collapse().height('auto');

		var lastClicked;

		// add scrollable class name if you need scrollable panes
		jQuery('body').on('click', '.accordion.scrollable .accordion-toggle',
				function() {
					lastClicked = jQuery(this);
				}); // move to faq section

		jQuery('body').on('shown', '.accordion.scrollable', function() {
			jQuery('html,body').animate({
				scrollTop : lastClicked.offset().top - 150
			}, 'slow');
		});
	}

	var handleTabs = function() {

		// function to fix left/right tab contents
		var fixTabHeight = function(tab) {
			$(tab).each(function() {
				var content = $($($(this).attr("href")));
				var tab = $(this).parent().parent();
				if (tab.height() > content.height()) {
					content.css('min-height', tab.height());
				}
			});
		}

		// fix tab content on tab shown
		$('body')
				.on(
						'shown',
						'.nav.nav-tabs.tabs-left a[data-toggle="tab"], .nav.nav-tabs.tabs-right a[data-toggle="tab"]',
						function() {
							fixTabHeight($(this));
						});

		$('body').on('shown', '.nav.nav-tabs', function() {
			handleSidebarAndContentHeight();
		});

		// fix tab contents for left/right tabs
		fixTabHeight('.nav.nav-tabs.tabs-left > li.active > a[data-toggle="tab"], .nav.nav-tabs.tabs-right > li.active > a[data-toggle="tab"]');

		// activate tab if tab id provided in the URL
		if (location.hash) {
			var tabid = location.hash.substr(1);
			$('a[href="#' + tabid + '"]').click();
		}
	}

	var handleScrollers = function() {
		$('.scroller').each(function() {
			$(this).slimScroll({
				size : '7px',
				color : '#a1b2bd',
				position : isRTL ? 'left' : 'right',
				height : $(this).attr("data-height"),
				alwaysVisible : ($(this).attr("data-always-visible") == "1" ? true : false),
				railVisible : ($(this).attr("data-rail-visible") == "1" ? true : false),
				disableFadeOut : true
			});
		});
	}

	var handleTooltips = function() {
		if (App.isTouchDevice()) { // if touch device, some tooltips can be skipped in order to not conflict with click events
			jQuery('.tooltips:not(.no-tooltip-on-touch-device)').tooltip();
		} else {
			jQuery('.tooltips').tooltip();
		}
	}

	var handleDropdowns = function() {
		$('body').on('click', '.dropdown-menu.hold-on-click', function(e) {
			e.stopPropagation();
		})
	}

	var handlePopovers = function() {
		jQuery('.popovers').popover();
	}

	var handleChoosenSelect = function() {
		if (!jQuery().chosen) {
			return;
		}

		$(".chosen").each(
				function() {
					$(this).chosen(
							{
								allow_single_deselect : $(this).attr("data-with-diselect") === "1" ? true : false
							});
				});
	}

	var handleFancybox = function() {
		if (!jQuery.fancybox) {
			return;
		}

		if (jQuery(".fancybox-button").size() > 0) {
			jQuery(".fancybox-button").fancybox({
				groupAttr : 'data-rel',
				prevEffect : 'none',
				nextEffect : 'none',
				closeBtn : true,
				helpers : {
					title : {
						type : 'inside'
					}
				}
			});
		}
	}

	var handleTheme = function() {

		var panel = $('.color-panel');

		if ($('body').hasClass('page-boxed') == false) {
			$('.layout-option', panel).val("fluid");
		}

		$('.sidebar-option', panel).val("default");
		$('.header-option', panel).val("fixed");
		$('.footer-option', panel).val("default");

		// handle theme layout
		var resetLayout = function() {
			$("body").removeClass("page-boxed")
					.removeClass("page-footer-fixed").removeClass(
							"page-sidebar-fixed").removeClass(
							"page-header-fixed");

			$('.header > .navbar-inner > .container').removeClass("container").addClass("container-fluid");

			if ($('.page-container').parent(".container").size() === 1) {
				$('.page-container').insertAfter('.header');
			}

			if ($('.footer > .container').size() === 1) {
				$('.footer').html($('.footer > .container').html());
			} else if ($('.footer').parent(".container").size() === 1) {
				$('.footer').insertAfter('.page-container');
			}

			$('body > .container').remove();
		}

		var lastSelectedLayout = '';

		var setLayout = function() {

			var layoutOption = $('.layout-option', panel).val();
			var sidebarOption = $('.sidebar-option', panel).val();
			var headerOption = $('.header-option', panel).val();
			var footerOption = $('.footer-option', panel).val();

			if (sidebarOption == "fixed" && headerOption == "default") {
				alert('Default Header with Fixed Sidebar option is not supported. Proceed with Default Header with Default Sidebar.');
				$('.sidebar-option', panel).val("default");
				sidebarOption = 'default';
			}

			resetLayout(); // reset layout to default state

			if (layoutOption === "boxed") {
				$("body").addClass("page-boxed");

				// set header
				$('.header > .navbar-inner > .container-fluid').removeClass("container-fluid").addClass("container");
				var cont = $('.header').after('<div class="container"></div>');

				// set content
				$('.page-container').appendTo('body > .container');

				// set footer
				if (footerOption === 'fixed' || sidebarOption === 'default') {
					$('.footer').html('<div class="container">' + $('.footer').html() + '</div>');
				} else {
					$('.footer').appendTo('body > .container');
				}
			}

			if (lastSelectedLayout != layoutOption) {
				// layout changed, run responsive handler:
				runResponsiveHandlers();
			}
			lastSelectedLayout = layoutOption;

			// header
			if (headerOption === 'fixed') {
				$("body").addClass("page-header-fixed");
				$(".header").removeClass("navbar-static-top").addClass("navbar-fixed-top");
			} else {
				$("body").removeClass("page-header-fixed");
				$(".header").removeClass("navbar-fixed-top").addClass("navbar-static-top");
			}

			// sidebar
			if (sidebarOption === 'fixed') {
				$("body").addClass("page-sidebar-fixed");
			} else {
				$("body").removeClass("page-sidebar-fixed");
			}

			// footer
			if (footerOption === 'fixed') {
				$("body").addClass("page-footer-fixed");
			} else {
				$("body").removeClass("page-footer-fixed");
			}

			handleSidebarAndContentHeight(); // fix content height
			handleFixedSidebar(); // reinitialize fixed sidebar
			handleFixedSidebarHoverable(); // reinitialize fixed sidebar hover effect
		}

		// handle theme colors
		var setColor = function(color) {
			$('#style_color').attr("href", "plugins/css/themes/" + color + ".css");
			$.cookie('style_color', color);
		}

		$('.icon-color', panel).click(function() {
			$('.color-mode').show();
			$('.icon-color-close').show();
		});

		$('.icon-color-close', panel).click(function() {
			$('.color-mode').hide();
			$('.icon-color-close').hide();
		});

		$('li', panel).click(function() {
			var color = $(this).attr("data-style");
			setColor(color);
			$('.inline li', panel).removeClass("current");
			$(this).addClass("current");
		});

		$('.layout-option, .header-option, .sidebar-option, .footer-option', panel).change(setLayout);
	}

	var handleFixInputPlaceholderForIE = function() {
		// fix html5 placeholder attribute for ie7 & ie8
		if (isIE8 || isIE9) { // ie7&ie8
			// this is html5 placeholder fix for inputs, inputs with
			// placeholder-no-fix class will be skipped(e.g: we need this for
			// password fields)
			jQuery(
					'input[placeholder]:not(.placeholder-no-fix), textarea[placeholder]:not(.placeholder-no-fix)')
					.each(
							function() {
								var input = jQuery(this);

								if (input.val() == '' && input.attr("placeholder") != '') {
									input.addClass("placeholder").val(input.attr('placeholder'));
								}

								input.focus(function() {
									if (input.val() == input .attr('placeholder')) {
										input.val('');
									}
								});

								input.blur(function() {
									if (input.val() == '' || input.val() == input .attr('placeholder')) {
										input.val(input.attr('placeholder'));
									}
								});
							});
		}
	}

	// * END:CORE HANDLERS *//

	return {

		// main function to initiate template pages
		init : function() {

			// IMPORTANT!!!: Do not modify the core handlers call order.

			// core handlers
			handleInit();
			handleResponsiveOnResize(); // set and handle responsive
			handleUniform();
			handleScrollers(); // handles slim scrolling contents
			handleResponsiveOnInit(); // handler responsive elements on page load

			// layout handlers
			handleFixedSidebar(); // handles fixed sidebar menu
			handleFixedSidebarHoverable(); // handles fixed sidebar on hover effect
			handleSidebarMenu(); // handles main menu
			handleHorizontalMenu(); // handles horizontal menu
			handleSidebarToggler(); // handles sidebar hide/show
			handleFixInputPlaceholderForIE(); // fixes/enables html5 placeholder attribute for IE9, IE8
			handleGoTop(); // handles scroll to top functionality in the footer
			handleTheme(); // handles style customer tool

			// ui component handlers
			handlePortletTools(); // handles portlet action bar functionality(refresh, configure, toggle, remove)
			handleDropdowns(); // handle dropdowns
			handleTabs(); // handle tabs
			handleTooltips(); // handle bootstrap tooltips
			handlePopovers(); // handles bootstrap popovers
			handleAccordions(); // handles accordions
			handleChoosenSelect(); // handles bootstrap chosen dropdowns

			App.addResponsiveHandler(handleChoosenSelect); // reinitiate chosen dropdown on main content resize.  disable this line if you don't really use chosen dropdowns.
		},

		fixContentHeight : function() {
			handleSidebarAndContentHeight();
		},

		addResponsiveHandler : function(func) {
			responsiveHandlers.push(func);
		},

		// useful function to make equal height for contacts stand side by side
		setEqualHeight : function(els) {
			var tallestEl = 0;
			els = jQuery(els);
			els.each(function() {
				var currentHeight = $(this).height();
				if (currentHeight > tallestEl) {
					tallestColumn = currentHeight;
				}
			});
			els.height(tallestEl);
		},

		// wrapper function to scroll to an element
		scrollTo : function(el, offeset) {
			pos = el ? el.offset().top : 0;
			jQuery('html,body').animate({
				scrollTop : pos + (offeset ? offeset : 0)
			}, 'slow');
		},

		scrollTop : function() {
			App.scrollTo();
		},

		// wrapper function to block element(indicate loading)
		blockUI : function(el, centerY) {
			var el = jQuery(el);
			el.block({
				message : '<img src="./plugins/img/ajax-loading.gif" align="">',
				centerY : centerY != undefined ? centerY : true,
				css : {
					top : '10%',
					border : 'none',
					padding : '2px',
					backgroundColor : 'none'
				},
				overlayCSS : {
					backgroundColor : '#000',
					opacity : 0.05,
					cursor : 'wait'
				}
			});
		},

		// wrapper function to un-block element(finish loading)
		unblockUI : function(el) {
			jQuery(el).unblock({
				onUnblock : function() {
					jQuery(el).removeAttr("style");
				}
			});
		},

		// initializes uniform elements
		initUniform : function(els) {

			if (els) {
				jQuery(els).each(function() {
					if ($(this).parents(".checker").size() == 0) {
						$(this).show();
						$(this).uniform();
					}
				});
			} else {
				handleUniform();
			}

		},

		// initializes choosen dropdowns
		initChosenSelect : function(els) {
			$(els).chosen({
				allow_single_deselect : true
			});
		},

		initFancybox : function() {
			handleFancybox();
		},

		getActualVal : function(el) {
			var el = jQuery(el);
			if (el.val() === el.attr("placeholder")) {
				return "";
			}

			return el.val();
		},

		getURLParameter : function(paramName) {
			var searchString = window.location.search.substring(1), i, val, params = searchString.split("&");

			for (i = 0; i < params.length; i++) {
				val = params[i].split("=");
				if (val[0] == paramName) {
					return unescape(val[1]);
				}
			}
			return null;
		},

		// check for device touch support
		isTouchDevice : function() {
			try {
				document.createEvent("TouchEvent");
				return true;
			} catch (e) {
				return false;
			}
		},

		isIE8 : function() {
			return isIE8;
		},

		isRTL : function() {
			return isRTL;
		},

		getLayoutColorCode : function(name) {
			if (layoutColorCodes[name]) {
				return layoutColorCodes[name];
			} else {
				return '';
			}
		}
	};
}();
